Các cải tiến về việc sử dụng ngôn ngữ cốt lõi C++11

Các cải tiến này nhằm làm cho việc sử dụng ngôn ngữ trở nên dễ dàng hơn và tăng sự an toàn các kiểu dữ liệu, loại bớt các đoạn mã lặp và giúp tránh nhiều đoạn mã lệnh sai.

Các danh sách khởi tạo

C++03 kế thừa tính năng "danh sách khởi tạo" từ ngôn ngữ C. Một kiểu cấu trúc (struct) hay một mảng (array) có thể được khởi tạo bằng một danh sách các tham số đầu vào theo thứ tự của các thành viên trong cấu trúc hoặc mảng đó. Các danh sách khởi tạo này có thể được tạo ra theo phương thức đệ quy (recursive) nhằm định nghĩa các cấu trúc hay mảng lồng xếp nhau. Ví dụ:

struct Object{ float first; int second;}; Object scalar = {0.43f, 10}; //One Object, with first=0.43f and second=10Object anArray[] = {{13.4f, 3}, {43.28f, 29}, {5.934f, 17}}; //An array of three Objects

Tính năng này rất hữu ích khi sử dụng với các cấu trúc dữ liệu tĩnh (static).

C++ cũng hỗ trợ việc sử dụng hàm khởi tạo (constructor) để khởi tạo một đối tượng của một lớp nào đó nhưng không tạo được sự thuận tiện như danh sách khởi tạo. C++03 chỉ hỗ trợ danh sách khởi tạo cho các cấu trúc (struct) và các lớp (class) phù họp với định nghĩa Dữ liệu cũ đơn giả (POD - Plain Old Data). C++11 mở rộng danh sách khởi tạo bằng cách cho phép chúng có thể được sử dụng với tất cả các lớp (class), kể cả các thùng chứa chuẩn (standard containers) của C++ như std::vector. Ví dụ:

class SequenceClass {public: SequenceClass(std::initializer_list<int> list);};

Khai báo trên cho phép chúng ta khởi tạo một đối tượng mới như sau:

SequenceClass some_var = {1, 4, 5, 6};

Hàm khởi tạo đặc biệt này được gọi là hàm khởi tạo theo danh sách khởi tạo (initializer-list constructor). Các lớp có các hàm khởi tạo đặc biệt này sẽ được xử lý một cách đặc biệt trong quá trình khởi tạo đồng nhất(xem thêm dưới đây).